home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / wild / include / wabl / wabl.h < prev    next >
C/C++ Source or Header  |  1999-05-25  |  3KB  |  77 lines

  1. #ifndef    WILD_WABL_FORMAT
  2. #define WILD_WABL_FORMAT
  3.  
  4. #include <exec/types.h>
  5. #include <exec/lists.h>
  6. #include <utility/hooks.h>
  7.  
  8. // syntax: !&Comm/[Type|Name]
  9.  
  10. struct WABLFriend
  11. {
  12.  struct MinNode        WABL_F_Node;     
  13.  char            WABL_F_Comm[16]; // The command or attribute name
  14.  char             WABL_F_Type[16]; // The type of object linked
  15.  char            WABL_F_Name[32]; // The name of the object linked
  16.  struct WABLObject     *WABL_F_Object;
  17.  ULONG            WABL_F_UserData;
  18. };
  19.  
  20. // syntax: !$Comm/[Value]
  21.  
  22. struct WABLAttr
  23. {
  24.  struct MinNode        WABL_A_Node;    // Link to other attrs of the object
  25.  char            WABL_A_Comm[16]; // The command or attribute name
  26.  char            *WABL_A_Value;    // The value (no size limit: it's a pointer!)
  27.  ULONG            WABL_A_ValueLen; // Size of mem, to free then.
  28.  ULONG            WABL_A_UserData;
  29. };
  30.  
  31. // syntax: !#Type/[Name]
  32.  
  33. struct WABLObject
  34. {
  35.  struct MinNode        WABL_O_Node;    // Link to brothers.
  36.  struct WABLObject    *WABL_O_Parent;    // Parent object.
  37.  struct    MinList        WABL_O_Attrs;    // The attributes, defined with $ commands.
  38.  struct MinList        WABL_O_Friends;    // The friends, using & commands.
  39.  struct MinList        WABL_O_Childs;    // The child groups, defined with #??/ commands
  40.  char            WABL_O_Type[16]; // You define with the command: #Level/[..] type is "Level"
  41.  char            WABL_O_Name[32]; // You define with command's arg: #Level/[hey!] name is "hey!"
  42.  ULONG            WABL_O_UserData;    // when using, useful having a userdata prt.
  43.  struct    WABL        *WABL_O_WABL;
  44. };
  45.  
  46. struct WABL
  47. {
  48.  struct    MinNode        WABL_Node;    // Useless now.
  49.  struct    WABLObject    *WABL_Parent;    // Useless now.
  50.  struct    MinList        WABL_Attrs;    // The attributes, defined with $ commands.
  51.  struct MinList        WABL_Friends;    // Pointers to other objects, defined with & commands.
  52.  struct MinList        WABL_Childs;    // The child groups, defined with #??/ commands
  53.  ULONG            *WABL_Pool;    // memory pool of this WABL
  54.  ULONG            *WABL_File;    // passed to hooks
  55.  struct Hook        *WABL_GetChar;    // must return a char (call conv: A2:file A1:unused)
  56.  struct Hook        *WABL_PutChar;    // must write a char  (call conv: A2:file A1:byte to write)
  57.  ULONG            WABL_UserData;    // used by you.
  58. };
  59.  
  60. #define GetWABLChar(wabl) CallHookPkt(wabl->WABL_GetChar,wabl->WABL_File,NULL)
  61. #define PutWABLChar(wabl,byte) CallHookPkt(wabl->WABL_PutChar,wabl->WABL_File,byte)
  62.  
  63. #define    WABL_TagBase    0x84000000+('W'<<16)+2000    // WILDOTHER+2000
  64.  
  65. #define    WABL_FileHandle        WABL_TagBase+1        // passed as data to Get&PutChar hooks via A2. 
  66. #define WABL_GetCharHook    WABL_TagBase+2        // the hook pointer
  67. #define WABL_PutCharHook    WABL_TagBase+3        // the hook pointer
  68.  
  69. #define    WABL_NEWOBJECT    '#'
  70. #define    WABL_NEWATTR    '$'
  71. #define WABL_NEWFRIEND    '&'
  72. #define WABL_COMMENT    '*'
  73. #define WABL_ENDOBJECT    '-'
  74. #define WABL_ENDCOMMAND    '/'
  75. #define WABL_LINESTART    '!'
  76.  
  77. #endif